iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
AI Security

《30 天從零打造資安語言模型:從微調到 Agent 落地》系列 第 20 篇

Day 20|任務三:月報是續寫,不是重寫

  • 分享至 

  • xImage
  •  

本文所有資料皆為合成資料。

一個框架轉換

月報原本是我認為最難的任務。

理由看起來很充分:它要統計一整個月的資料、要看出趨勢、要跟過去比較、要給有洞察的建議。這聽起來需要很強的分析能力。

做了之後我發現我完全想錯了。月報不難,因為它不是創作,是續寫。

客戶手上有你過去六個月的月報。他讀第七份的方式,不是從頭理解,是看哪裡跟上個月不一樣。他期待的段落順序、圖表形式、用詞、甚至句式,全都跟前六份一樣。

一旦接受「這是續寫」,整個任務的難度就塌下來了——因為前六期月報本身就是最好的範本、最好的語氣示範、最好的格式規範。

統計歸統計,敘事歸敘事

第一件事,也是最重要的一件事:把月報拆成兩層。

統計層(程式)           敘事層(模型)
─────────────           ─────────────
告警總數                 「本月告警量較上月下降約一成」
各嚴重性分佈             「其中高嚴重性事件維持在個位數」
較上月增減百分比          「主要減少來自誤報規則調整後的效果」
處理時效統計             「平均回應時間符合服務水準」
Top N 規則觸發           「XX 規則的觸發次數仍居首位」
新增資產數

左邊由程式計算,右邊由模型敘述。模型不碰任何一個數字的產生。

我把統計結果組成一個類似 Data Pack 的結構(合成範例):

{
  "report_period": "2026-08",
  "client_display_name": "【客戶名稱】",
  "stats": {
    "alerts_total": 1284,
    "alerts_prev": 1421,
    "alerts_delta_pct": -9.6,
    "by_severity": {"高": 6, "中": 47, "低": 1231},
    "by_severity_prev": {"高": 9, "中": 52, "低": 1360},
    "incidents_escalated": 3,
    "avg_response_minutes": 18,
    "sla_target_minutes": 30,
    "sla_met_pct": 98.2,
    "top_rules": [
      {"rule": "Outbound to Low-Reputation Host", "count": 213, "prev": 198},
      {"rule": "Failed Logon Burst", "count": 156, "prev": 241},
      {"rule": "Suspicious PowerShell", "count": 88, "prev": 76}
    ],
    "new_assets_onboarded": 12
  },
  "notable_events": [
    {"ref": "IR-2026-0731-014", "summary": "財務部工作站可疑執行行為", "severity": "高", "status": "已結案"}
  ],
  "context_notes": [
    {"type": "rule_tuning", "detail": "8/5 調整 Failed Logon Burst 門檻", "affects": "可解釋該規則觸發次數下降"}
  ],
  "prev_reports_ref": ["2026-07", "2026-06", "2026-05", "2026-04", "2026-03", "2026-02"]
}

context_notes 是這個任務的秘密武器

注意上面那個 context_notes 欄位。

它記的是「這個月我們做了什麼會影響數字的事」——調整了規則、上線了新設備、客戶有大型專案、放了長假。

沒有這個欄位,模型只能寫「Failed Logon Burst 觸發次數較上月下降 35%」。有了它,模型能寫「該項下降主要反映 8 月 5 日規則門檻調整後的效果」。

前者是把數字念一遍,客戶自己看圖表就知道了。後者是解釋,那才是月報的價值。

而 context_notes 是人填的,不是算出來的。這個系統裡最有價值的一個欄位,是唯一需要人手動輸入的欄位。 我覺得這件事本身很有意思。

從前六期月報蒸餾出模板

「續寫」的具體做法是:從前六期月報抽出骨架與語氣特徵,放進 prompt。

抽出來的東西包含:

  • 段落結構:標題層級、順序、哪些段落必有、哪些段落視情況有
  • 句式慣例:怎麼描述增減(「較上月下降約一成」而非「下降 9.6%」)、怎麼描述達標(「符合服務水準」)
  • 長度分佈:每個段落大致幾句話
  • 禁用詞:這個客戶不喜歡看到的表述

注意「較上月下降約一成」這個例子。 精確數字放在圖表裡,敘事段落用約略說法——這是專業報告的慣例,也是模型不會自己知道、必須從歷史範本學來的東西。

同樣重要的是:只抽骨架,不帶內容。 這跟 Day 17 一樣。帶了內容模型會抄,可能把上個月的事件寫進這個月。

初稿範例(合成)

# 資安監控月報 2026 年 8 月

 

## 一、本月概況
本月共處理告警 1,284 筆,較上月減少約一成。其中高嚴重性
事件 6 件、中嚴重性 47 件,較上月分別減少 3 件與 5 件。
本月共升級處理資安事件 3 件,皆已結案。

 

## 二、服務水準
平均回應時間 18 分鐘,符合 30 分鐘之服務水準約定,
達標率 98.2%。

 

## 三、告警趨勢分析
本月告警量下降主要來自「Failed Logon Burst」規則觸發次數
的減少(自 241 次降至 156 次),此一變化反映 8 月 5 日
針對該規則門檻進行調整後的效果,屬預期內的優化結果。

 

「Outbound to Low-Reputation Host」仍為觸發次數最高之規則
(213 次),較上月略增,建議持續關注端點對外連線行為。

 

## 四、重要事件
IR-2026-0731-014|財務部工作站可疑執行行為|高|已結案
(詳見該事件之獨立報告)

 

## 五、環境變動
本月新增納管資產 12 項。

 

## 六、下月重點建議
1. 持續觀察對外連線相關告警之趨勢。
2. 建議評估針對端點 PowerShell 執行原則之強化。

幾個值得看的地方

第三段的因果連結,來自 context_notes。這是整份月報唯一有洞察的地方,而它的來源是人填的一行字。

「屬預期內的優化結果」——這句話很重要。它區分了「數字下降是好事」與「數字下降需要擔心」。沒有 context_notes,模型無法做這個判斷,只能中性地陳述。

建議事項的來源:注意這兩條建議都是從本月的資料延伸出來的,而不是通用建議。第 2 條實際上呼應了 IR-2026-0731-014 那件事。這是 SFT 與蒸餾階段訓練出來的關聯能力。

這個任務為什麼最適合微調

Day 13 我說月報是「微調價值最高的一個任務」。原因現在很清楚了:

它的核心需求是「一致」,而一致正是微調的主場。

  • 格式要跟前六期一致 → 微調
  • 語氣要跟前六期一致 → 微調
  • 句式慣例要一致 → 微調
  • 數字要正確 → 程式
  • 因果解釋要正確 → 人填的 context_notes

四個任務裡,月報是微調貢獻佔比最高的。也是節省時間最多的——一份月報從三小時降到審核二十分鐘。

明天換最後一個任務:新人訓練。


🛡️ Instagram: @aid3fend — AI 資安實戰紀錄,歡迎追蹤交流。



上一篇
Day 19|知識飛輪:審核回存怎麼變成下一輪的資料
下一篇
Day 21|任務四:出題、批改,以及為什麼出處比答案重要
系列文
《30 天從零打造資安語言模型:從微調到 Agent 落地》 共 21 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言